<?php
//作业1：完成验证码类,点击切换验证码
class Code{
	//验证码画布的宽高
	private $width;
	private $height;
	//画布背景色
	private $bgColor;
	//图像资源
	private $img;
	//验证码种子
	private $seed;
	//验证码大小
	private $size;
	//验证码长度
	private $codeLen;
	//字体文件
	private $fontFile;
	
	/**
	 * 构造函数
	 */
	public function __construct($codeLen=NULL,$width=NULL,$height=NULL,$bgColor=NULL,$size=NULL,$seed=NULL,$fontFile=NULL){
		$this->width = is_null($width) ? 160 : $width;
		$this->height = is_null($height) ? 35 : $height;
		//背景色
		$this->bgColor = is_null($bgColor) ? '#ffffff' : $bgColor;
		//验证码种子
		$this->seed = is_null($seed) ? '1234567890qwertyuioasdfghjklzxcvbnmZXCVBNNMASDFGHJKLQWERTYUIOP' : $seed;
		//字体大小
		$this->size = is_null($size) ? 20 : $size;
		//长度
		$this->codeLen = is_null($codeLen) ? C('CODE_LEN') : $codeLen;
		//字体文件
		$this->fontFile = is_null($fontFile) ? 'Hdphp/Tool/font.ttf' : $fontFile;
	}
	/**
	 * 显示验证码
	 */
	public function show(){
		//1.发送头部，告诉浏览器是图片文件
		header('Content-type:image/png');
		//2.创建画布
		$this->_createBg();
		//3.写字
		$this->_write();
		//4.干扰
		$this->_makeTrouble();
		//5.输出图像
		imagepng($this->img);
		//6.销毁图像
		imagedestroy($this->img);
	}
	/**
	 * 创建干扰
	 */
	private function _makeTrouble(){
		for ($i=0; $i < 10; $i++) {
			$color = imagecolorallocate($this->img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); 
			imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $color);
		}
	}
	
	/**
	 * 写字
	 */
	private function _write(){
		$code = '';
		for ($i=0; $i < $this->codeLen; $i++) {
			//算得字体的x，y坐标
			$x = $this->width / $this->codeLen * $i + 10; 
			$y = ($this->height + $this->size) / 2;
			//写字
			$color = imagecolorallocate($this->img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
			$text = $this->seed[mt_rand(0, strlen($this->seed) - 1)];
			//把每一次的验证码都连接上
			$code .= $text;
			imagettftext($this->img, $this->size, mt_rand(-45, 45), $x, $y, $color, $this->fontFile, $text);
		}
		//把它转成大写，就是为了将来做不区分大小写
		$_SESSION['code'] = strtoupper($code);
		
	}
	
	/**
	 * 创建画布
	 */
	private function _createBg(){
		$img = imagecreatetruecolor($this->width,$this->height);
		//转换16进制颜色 就是为了 #ffffff这样的颜色imagefill可以使用
		$color = hexdec($this->bgColor);
		imagefill($img, 0, 0, $color);
		$this->img = $img;
	}
}








